package utilidades;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

import aplicacion.MenuPrincipal;

public class BarraProgreso implements Runnable {
    private JProgressBar jProgressBar;
    private JDialog dialog;
    private int valorBarra = 1;
    private int incrementoBarra = 1;
    private int minimoBarra = 0;
    private int maximoBarra = 100;
	public static boolean procesoActivo = false;

    public BarraProgreso(final MenuPrincipal menuPrincipal)
    {
        jProgressBar = new JProgressBar(minimoBarra, maximoBarra);
        jProgressBar.setPreferredSize(new Dimension(300, 50));
    	dialog = new JDialog(menuPrincipal, true);
    	dialog.setSize(new Dimension(300, 50));
    	dialog.setModal(false);
        dialog.add(BorderLayout.CENTER, jProgressBar);
        dialog.add(BorderLayout.NORTH, new JLabel("Progreso..."));
        dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        dialog.setLocationRelativeTo(menuPrincipal);
        dialog.setResizable(false);
        dialog.pack();
    }

    @Override
    public void run() {
    	dialog.setVisible(true);
    	valorBarra = 1;        
        //mientra el trabajo en paralelo no finalice el jProgressBar continuara su animacion una y otra vez
        while(procesoActivo)
        {
            //si llega al limite 100 comienza otra vez desde 1, sino incrementa valorBarra en 1
        	valorBarra = (valorBarra > maximoBarra) ? 1 : valorBarra + incrementoBarra;
            jProgressBar.setValue(valorBarra);
            jProgressBar.repaint(); 
            //retardo en milisegundos
            try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}                    
            //si el trabajo en paralelo a terminado
            if( !procesoActivo )
            {
                jProgressBar.setValue(maximoBarra);
                break;//rompe ciclo 
            }
        }
        dialog.dispose();
    }

	public int getIncrementoBarra() {
		return incrementoBarra;
	}

	public void setIncrementoBarra(int incrementoBarra) {
		this.incrementoBarra = incrementoBarra;
	}

	public boolean isProcesoActivo() {
		return procesoActivo;
	}

	public void setProcesoActivo(boolean procesoActivo) {
		BarraProgreso.procesoActivo = procesoActivo;
	}
	
	public int getMinimoBarra() {
		return minimoBarra;
	}

	public void setMinimoBarra(int minimoBarra) {
		this.minimoBarra = minimoBarra;
	}

	public int getMaximoBarra() {
		return maximoBarra;
	}

	public void setMaximoBarra(int maximoBarra) {
		this.maximoBarra = maximoBarra;
	}
}


